GtkListBox: Implement non-selectable rows
authorMatthias Clasen <mclasen@redhat.com>
Wed, 16 Jul 2014 03:14:28 +0000 (23:14 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Wed, 16 Jul 2014 03:57:33 +0000 (23:57 -0400)
This commit changes things so that we never mark non-selectable
rows as selected.

gtk/gtklistbox.c

index a679edba1acf161be4ae70f2146c87543171805c..1095f6f732d79a99ca23b18039c6eb59795e028f 100644 (file)
@@ -1388,6 +1388,9 @@ static gboolean
 gtk_list_box_row_set_selected (GtkListBoxRow *row,
                                gboolean       selected)
 {
+  if (!ROW_PRIV (row)->selectable)
+    return FALSE;
+
   if (ROW_PRIV (row)->selected != selected)
     {
       ROW_PRIV (row)->selected = selected;
@@ -1448,11 +1451,15 @@ static void
 gtk_list_box_select_row_internal (GtkListBox    *box,
                                   GtkListBoxRow *row)
 {
+  if (!ROW_PRIV (row)->selectable)
+    return;
+
   if (ROW_PRIV (row)->selected)
     return;
 
   if (BOX_PRIV (box)->selection_mode == GTK_SELECTION_NONE)
     return;
+
   if (BOX_PRIV (box)->selection_mode != GTK_SELECTION_MULTIPLE)
     gtk_list_box_unselect_all_internal (box);
 
@@ -1521,6 +1528,9 @@ gtk_list_box_update_selection (GtkListBox    *box,
   if (priv->selection_mode == GTK_SELECTION_NONE)
     return;
 
+  if (!ROW_PRIV (row)->selectable)
+    return;
+
   if (priv->selection_mode == GTK_SELECTION_BROWSE)
     {
       gtk_list_box_unselect_all_internal (box);